/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.univali.sindico.mb;

import br.univali.sindico.dao.ApartamentoDAO;
import br.univali.sindico.dao.BlocoDAO;
import br.univali.sindico.dao.DadosAcessoDAO;
import br.univali.sindico.dao.MoradorDAO;
import br.univali.sindico.dao.PessoaDAO;
import br.univali.sindico.entity.Apartamento;
import br.univali.sindico.entity.Bloco;
import br.univali.sindico.entity.Morador;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;
import org.primefaces.context.RequestContext;

/**
 *
 * @author Fernando
 */
@ManagedBean
@SessionScoped
public class MoradorMB {
    
    private MoradorDAO moradorDAO = new MoradorDAO();
    private BlocoDAO blocoDAO = new BlocoDAO();
    private Integer idBloco = 0;
    private Integer idAp = 0;
    private ApartamentoDAO apDAO = new ApartamentoDAO();
    private DadosAcessoDAO daDAO = new DadosAcessoDAO();
    private PessoaDAO p = new PessoaDAO();
    private Morador morador;
    private Bloco bloco = new Bloco();
    private Apartamento ap = new Apartamento();
    private Morador moradorSelecionado = new Morador();
    
    @PostConstruct
    public void init(){
        morador = new Morador();
    }

    public Morador getMoradorSelecionado() {
        return moradorSelecionado;
    }

    public void setMoradorSelecionado(Morador moradorSelecionado) {
        this.moradorSelecionado = moradorSelecionado;
    }

    public Integer getIdBloco() {
        return idBloco;
    }

    public void setIdBloco(Integer idBloco) {
        this.idBloco = idBloco;
    }

    public Integer getIdAp() {
        return idAp;
    }

    public void setIdAp(Integer idAp) {
        this.idAp = idAp;
    }

    public MoradorDAO getMoradorDAO() {
        return moradorDAO;
    }

    public Bloco getBloco() {
        return bloco;
    }

    public void setBloco(Bloco bloco) {
        this.bloco = bloco;
    }

    public Apartamento getAp() {
        return ap;
    }

    public void setAp(Apartamento ap) {
        this.ap = ap;
    }

    public void setMoradorDAO(MoradorDAO moradorDAO) {
        this.moradorDAO = moradorDAO;
    }

    public Morador getMorador() {
        return morador;
    }

    public void setMorador(Morador morador) {
        this.morador = morador;
    }
    
    public List<Morador> getAll(){
        return moradorDAO.getAll();
    }
    
    public void salvar(ActionEvent event){
        System.out.println(morador.getNome());
        bloco = blocoDAO.getById(idBloco);
        ap = apDAO.getById(idAp);
        ap.setBlocoCodigo(bloco);
        daDAO.save(morador.getDadosAcessoCodigo());
        morador.setApartamentoCodigo(ap);
        moradorDAO.save(morador);
        clean();
        RequestContext.getCurrentInstance().execute("modalMorador.hide()");
        FacesContext.getCurrentInstance().addMessage("tabView:formMorador:messageMorador", new FacesMessage(FacesMessage.SEVERITY_INFO, null, "Morador Cadastrado Com Sucesso!"));
    }
    
    public void delete(){
        if(moradorSelecionado != null){
            moradorDAO.delete(moradorSelecionado);
            FacesContext.getCurrentInstance().addMessage("tabView:formMorador:messageMorador", new FacesMessage(FacesMessage.SEVERITY_INFO, null, "Morador Deletado Com Sucesso!"));
        }
        clean();
    }
    
    public List<SelectItem> getListAp(){
        List<SelectItem> list = new ArrayList<SelectItem>();
        if(idBloco != 0){
            for(Apartamento app : apDAO.getAllbyBloco(idBloco)){
                list.add(new SelectItem(app.getCodigo(), app.getApartamento()));
            }
        }
        return list;
    }
    
    public List<SelectItem> getListBloco(){
        List<SelectItem> list = new ArrayList<SelectItem>();
        for(Bloco b : blocoDAO.getAll()){
            list.add(new SelectItem(b.getCodigo(), b.getBloco()));
        }
        return list;
    }
    
    public void abrirEditar(){
        idBloco = moradorSelecionado.getApartamentoCodigo().getBlocoCodigo().getCodigo().intValue();        
        idAp = moradorSelecionado.getApartamentoCodigo().getCodigo().intValue();
        bloco = blocoDAO.getById(idBloco);
        ap = apDAO.getById(idAp);
        ap.setBlocoCodigo(bloco);
        daDAO.save(moradorSelecionado.getDadosAcessoCodigo());
        moradorSelecionado.setApartamentoCodigo(ap);
        morador = moradorSelecionado;
    }
    
    public void clean(){
        bloco = new Bloco();
        morador = new Morador();
        ap = new Apartamento();
        idAp = 0;
        idBloco = 0;
    }
    
}
